home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / (A)C / (A)C3.ADF / AmiTCP / AmiTCP-bin-2.2.lha / AmiTCP-2.2 / Install_AmiTCP < prev    next >
Text File  |  1993-11-19  |  50KB  |  1,400 lines

  1. ;;;; Hey Emacs, this script might as well be -*- lisp -*-
  2. ;;;;
  3. ;;;; Install_AmiTCP - AmiTCP/IP installation script for Installer
  4. ;;;;
  5. ;;;; Copyright ⌐ 1993 AmiTCP/IP Group, <amitcp-group@hut.fi>
  6. ;;;;
  7. ;;;; $Id: Install_AmiTCP,v 2.7 1993/11/19 23:29:13 jraja Exp $
  8. ;;;;
  9. ;;;; This script has been tested with Installer 1.24:
  10. ;;;;
  11. ;;;;     Installer and Installer project icon
  12. ;;;;     (c) Copyright 1991-93 Commodore-Amiga, Inc.  All Rights Reserved.
  13. ;;;;     Reproduced and distributed under license from Commodore.
  14. ;;;;
  15. ;;;;     INSTALLER SOFTWARE IS PROVIDED "AS-IS" AND SUBJECT TO CHANGE;
  16. ;;;;     NO WARRANTIES ARE MADE.  ALL USE IS AT YOUR OWN RISK.  NO LIABILITY
  17. ;;;;     OR RESPONSIBILITY IS ASSUMED.
  18. ;;;;
  19. ;;;; Use following Icon tooltypes / Command line options:
  20. ;;;; APPNAME=AmiTCP/IP
  21. ;;;; MINUSER=AVERAGE
  22. ;;;;
  23. (welcome "    Welcome to " @app-name " 2.2 installation.\n"
  24.      "    We hope that after this installation your world of "
  25.      "communication will be much more broader than before.")
  26. ;;;;
  27. ;;;; What we are?
  28. ;;;;
  29. (set app-name (cat @app-name " 2.2"))
  30.  
  31. ;;;;
  32. ;;;; "Needs"
  33. ;;;;
  34. (set need-version 37  ; version of operating system need by AmiTCP/IP
  35.      need-memory (* 512 1024))
  36. ;;;
  37. ;;; Destination directories of the AmiTCP/IP
  38. ;;;
  39. (set 
  40.  atcp-name "AmiTCP"
  41.  atcp-assign (cat atcp-name ":")    ; Assign to AmiTCP
  42.  ;; Application libraries etc.
  43.  appl-dir (tackon atcp-assign "appl")
  44.  ;; Configuration
  45.  conf-dir (tackon atcp-assign "db")
  46.  ;; User binaries
  47.  bin-dir (tackon atcp-assign "bin")
  48.  ;; documentation
  49.  doc-dir (tackon atcp-assign "doc")
  50.  ;; devices directory
  51.  devs-dir (tackon atcp-assign "devs")
  52.  networks-dir (tackon devs-dir "networks")
  53.  ;; DOS handlers
  54.  l-dir (tackon atcp-assign "l")
  55.  ;; source
  56.  src-dir (tackon atcp-assign "src")
  57.  ;; includes for net applications
  58.  include-dir (tackon atcp-assign "netinclude")
  59.  ;; network link libraries
  60.  lib-dir (tackon atcp-assign "netlib")
  61.  ;; daemons
  62.  serv-dir (tackon atcp-assign "serv")
  63.  ;;
  64.  ;; If you add directories above, then also add the name of the variable below.
  65.  ;; This is to have "for i in a b c d ..." construct
  66.  ;;
  67.  ;; These directories are always present
  68.  dir-pat (cat "(" "appl" "|" "db" "|" "bin" "|" "doc" "|" "l" "|" "serv" ")")
  69.  ;; Optional directories
  70.  dir-pat-opt (cat "(" "devs" "|" "netinclude" "|" "netlib" "|" "src" ")")
  71.  ;; The source directory name
  72.  source-dir (if (= 1 (exists @icon))
  73.             (pathonly (expandpath @icon))
  74.           (expandpath @icon))
  75.  ;; Mounts
  76.  tcp-mount (cat 
  77.         "Assign TCP: Exists > NIL:\n" 
  78.         "IF Warn\n"
  79.         "  Mount TCP: from AmiTCP:devs/Inet-Mountlist\n"
  80.         "EndIf\n")
  81.  )
  82.  ;; How to get needed information?
  83. (set
  84.  net-setup-help
  85.      "    You can get this information from your network administration.\n")
  86.  
  87. ;;; copy "more" to ram: to be able to use it
  88. (set
  89.  pager-cmd (if (exists "ENV:PAGER" (noreq)) (getenv "PAGER"))
  90.  pager-cmd 
  91.  (if pager-cmd pager-cmd 
  92.    (if (exists "SYS:Utilities/More" (noreq))
  93.        ((copyfiles
  94.      (prompt "Copying sys:utilities/more to ram: for use")
  95.      (source "SYS:Utilities/More")
  96.      (dest   "RAM:")
  97.      (safe)
  98.      (optional "nofail"))
  99.     "RAM:More")
  100.      ("more"))))
  101.  
  102. ;; Return old AmiTCP: assign if we are aborting
  103. (onerror
  104.  (if old-atcp-directory
  105.      (makeassign atcp-name old-atcp-directory)))
  106.  
  107. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  108. (procedure
  109.  ask-ip-address
  110.  ;;  Procedure to ask an IP address
  111.  ;;
  112.  ;; arguments:
  113.  ;;  ::ask-ip-prompt   - Prompt text
  114.  ;;  ::ask-ip-help     - help text
  115.  ;;  ::ask-ip-need     - empty result allowed if not true
  116.  ;;
  117.  ;; locally used names:
  118.  ;;  ::ask-ip-result
  119.  (set ::ask-ip-result "<none>")
  120.  (while
  121.      ((set ::ask-ip-result
  122.        (askstring
  123.         (prompt ::ask-ip-prompt
  124.             (if (NOT ::ask-ip-need)
  125.             (cat "\nGive an empty string if you want to "
  126.                  "by-pass this option."))
  127.             (if (NOT (= ::ask-ip-result "<none>"))
  128.             (cat "\n\nYou entered an invalid value\n\""
  129.                  ::ask-ip-result "\".\n"
  130.                  "Enter a valid IP address.")))
  131.         (default (if (<> ::ask-ip-result "<none>") ::ask-ip-result ""))
  132.         (help net-setup-help
  133.           ::ask-ip-help
  134.           "\n    Internet address is a string of at most four "
  135.           "decimal numbers separated by dots. For example, "
  136.           "\"130.233.161.40\" is a valid internet address.\n"
  137.           "    You will be asked again for the address, "
  138.           "if the address you entered is invalid.")))
  139.       ;; loop while answer is unacceptable
  140.       (if ::ask-ip-result
  141.       (NOT (patmatch "# #(1|2|3|4|5|6|7|8|9|0).#(1|2|3|4|5|6|7|8|9|0|.)# "
  142.              ::ask-ip-result))
  143.      ::ask-ip-need)))
  144.  ::ask-ip-result)
  145.  
  146. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  147. (procedure
  148.  check-system-version
  149.  ;; is your Exec recent enough?
  150.  (set exec-version (/ (getversion) 65536))
  151.  (transcript "Running on exec version " exec-version ".")
  152.  (if (< exec-version need-version)    ; check operating system version
  153.      ((message @app-name " needs at least Exec version " need-version
  154.            " to run.\nYou have only version " exec-version ".\n"
  155.            "You can proceed with the installation, but consider "
  156.            "installing the " @app-name " with proper version of "
  157.            "the operating system."
  158.            (help
  159.         "    The " @app-name " uses some system functions "
  160.         "that are not present or functional in earlier system "
  161.         "versions. Consider updating your system.\n"
  162.         "    If you have a later version of operating system "
  163.         "and are only now using older version: be sure to use "
  164.         "only release 2.04 or newer with " @app-name ". "
  165.         "No damage happens if you run " @app-name " with an "
  166.         "earlier operating system, however. It just "
  167.         "refuses to start.\n"
  168.         "    If you decide to continue, no changes will be made to "
  169.         "system startup files, so you must edit them yourself. "
  170.         "Refer instructions for manual installation."))
  171.       (transcript "User decided to continue installation while running "
  172.           "on operating system release earlier than 2.04."))))
  173.  
  174.  
  175. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  176. (procedure
  177.  check-available-memory
  178.  ;;
  179.  (transcript "Checking available memory.")
  180.  (set avail-mem (+ (database "total-mem")))
  181.  (if (< avail-mem need-memory)
  182.      ((message "Your system has only " (/ avail-mem 1024) " kilobytes of "
  183.            "free memory, while " @app-name " needs at least "
  184.            (/ need-memory 1024) " to be useful.\n"
  185.            "You can continue the installation but be warned!")
  186.       (transcript "User decided to continue installation while available "
  187.           "memory was below the recommended minimum."))))
  188.  
  189. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  190. (procedure
  191.  check-user-level
  192.  ;;
  193.  (transcript "Checking user level.")
  194.  (if (< @user-level 1)
  195.      ((transcript "Installation aborted due to too low user level.")
  196.       (abort "AmiTCP/IP installation requires at least the \"average\" "
  197.          "user level. Restart installation and select appropriate user "
  198.          "level."))))
  199.  
  200. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  201. (procedure
  202.  check-old-assign
  203.  ;; If there is already the AmiTCP/IP installed, store the assign
  204.  ;; to old-atcp-directory
  205.  (transcript "Checking for already installed AmiTCP.")
  206.  (if (exists atcp-assign (noreq))
  207.      (set old-atcp-directory (getassign atcp-name)))
  208.  (if old-atcp-directory
  209.      (transcript "Existing AmiTCP detected at directory " 
  210.          old-atcp-directory ".")))
  211.  
  212. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  213. (procedure
  214.  select-destination-directory
  215.  ;; Select destination directory for the installation. We suggest the user
  216.  ;; to install to the place from where the installer was started. This is
  217.  ;; since normally this software will be unarchived to its proper location
  218.  ;; and the files don't have to be copied any more.
  219.  ;;
  220.  (transcript "Selecting destination directory for the installation.")
  221.  (while
  222.      ((set @default-dest
  223.        (askdir
  224.         (prompt "Select directory where to install " @app-name ".\n"
  225.             "Most of the files don't have to be copied, if you accept "
  226.             "the offered default.")
  227.         (help "    Here you can specify location where to install "
  228.           "the " @app-name ".\n"
  229.           "    Installation can be made on-place. "
  230.           "This is recommended if you have already unarchived "
  231.           "the " @app-name " archive to its final location. "
  232.           "In this case "
  233.           "most of the files are left where they are. "
  234.           "Only necessary files are copied to different "
  235.           "positions.\n"
  236.           "    Installation must NOT be made on top of the 1.0 "
  237.           "version of the " @app-name)
  238.         (newpath)
  239.         (default source-dir)))
  240.       (if (= 2 (exists @default-dest))
  241.       ;; check that installation is not tried over the old version
  242.       (if (OR (exists (tackon @default-dest "bin/AmiTCP")) ; version 1.0
  243.           (> (getversion (tackon source-dir "AmiTCP"))
  244.              (if (exists (tackon @default-dest "AmiTCP"))
  245.              (getversion (tackon @default-dest "AmiTCP"))
  246.                $7FFFFFFF)))
  247.           ((message "You are possibly trying to install " @app-name " "
  248.             "over an old version of it.\n"
  249.             "It is not allowed.\n"
  250.             "You should select some other directory or abort "
  251.             "the installation.")
  252.            1)
  253.         0)
  254.     ((makedir @default-dest
  255.          (infos))
  256.      0))))
  257.  
  258.  ;; Make the AmiTCP: assign
  259.  (makeassign atcp-name @default-dest))
  260.  
  261. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  262. (procedure
  263.  copy-files-to-destination ;;; Copy all files if not installing on-place
  264.  ;;
  265.  (if (= source-dir
  266.     (expandpath @default-dest))
  267.      (message "\nSource and destination directories are the same, "
  268.           "not copying."
  269.           (help "    The " @app-name " files don't have to be copied, "
  270.             "since the source and destination directory are "
  271.             "the same"))
  272.    ((transcript "Copying " @app-name " files from " source-dir " to "
  273.         @default-dest ".")
  274.     (set dir-information
  275.      (cat
  276.       (if (exists "devs")
  277.           "devs - SANA-II device drivers\n")
  278.       (if (exists "netinclude")
  279.           (cat "netinclude - include files needed for networking "
  280.            "applications development\n"))
  281.       (if (exists "netlib")
  282.          "netlib - link libraries for networking program development\n")
  283.       (if (exists "src/appl")
  284.           "src/amitcp - source code for applications\n")
  285.       (if (exists "src/amitcp")
  286.           "src/amitcp - source code for AmiTCP/IP\n")
  287.       (if (exists "src/devs")
  288.           "src/util - source code for network device drivers\n")
  289.       (if (exists "src/util")
  290.           "src/util - source code for utilities\n")
  291.       ))
  292.     (if (< 0 (strlen dir-information))
  293.     (if (askbool
  294.          (prompt "\nDo you want directories needed only with development "
  295.              "of " @app-name " or applications to be copied?")
  296.          (help "    These directories (and their contents) is "
  297.            "not needed to use AmiTCP/IP. "
  298.            "You need to copy them only when you plan to "
  299.            "make network programs by yourself.\n"
  300.            "    Description of directories:\n"
  301.            dir-information
  302.            (if (= @user-level 1)
  303.                "    If you select EXPERT level at start, you "
  304.              "    You ")
  305.            "will be prompted for each directory.\n"))
  306.         (foreach
  307.          source-dir dir-pat-opt
  308.          (copyfiles
  309.           (source source-dir)
  310.           (choices (fileonly @each-name))
  311.           (confirm)
  312.           (dest @default-dest)
  313.           (prompt
  314.            (if (= @user-level 1)
  315.            "Copying files to selected location."
  316.          "Copy this directory?"))
  317.           (help "    Description of directories:\n"
  318.             dir-information)
  319.           (optional "askuser")))))
  320.     (foreach source-dir dir-pat
  321.          ((set dest-dir (tackon @default-dest @each-name))
  322.           (if (NOT (exists dest-dir))
  323.           (makedir dest-dir))
  324.           (copyfiles (all)
  325.              (source (expandpath @each-name))
  326.              (dest dest-dir)
  327.              (prompt "Copying files to the selected location.")
  328.              (optional "askuser"))))
  329.     (copyfiles (source source-dir)
  330.            (dest @default-dest)
  331.            (prompt "Copying files to the selected location.")
  332.            (pattern "#?")
  333.            (files)
  334.            (infos)
  335.            (optional "askuser"))))
  336.  ;;
  337.  ;; Add script flags to the scripts, pure flags to pure programs
  338.  ;;
  339.  (protect (tackon bin-dir "netstat") "+s +e")
  340.  (protect (tackon bin-dir "SynClock") "+s +e")
  341.  (if (exists src-dir)
  342.      (protect (tackon src-dir "compile") "+s +e"))
  343.  (protect (tackon bin-dir "NapsaTerm") "+p +e")
  344.  (protect (tackon serv-dir "in.fingerd") "+p +e")
  345.  )
  346.  
  347. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  348. (procedure
  349.  ask-hostname ;; Get host name and default domain
  350.  ;;
  351.  (procedure
  352.   setenv-hostname ;; Store hostname to the environment variable
  353.   ;;
  354.   ;; Tell the user that the environment variable HOSTNAME will be used.
  355.   ;;
  356.   (if
  357.       (askbool
  358.        (prompt "\nThe host name \"" my-full-name "\" will be stored to the "
  359.            "environment variable HOSTNAME where networking code "
  360.            "assumes it to be found.\n"
  361.            "This can be done in two ways: Either the variable is "
  362.            "stored to the ENV: and ENVARC: or a \"setenv\" command "
  363.            "is put to the s:user-startup.\n\n"
  364.            "Choose which to do:")
  365.        (choices "Store to ENV(ARC):" "Use \"setenv\"")
  366.        (default 1)
  367.        (help "    This variable must be set for the applications "
  368.          "to work correctly.\n"
  369.          "    The ENVARC: is the standard place to store environment "
  370.          "variables which must not peridh on a re-boot. "
  371.          "Select \"setenv\" only if you are sure that it is needed."))
  372.       ((set use-setenv-to-set-hostname 0)
  373.        (if (= 2 (exists "ENV:"))
  374.        (textfile (dest "ENV:HOSTNAME")
  375.              (append my-full-name)))
  376.        (if (= 2 (exists "ENVARC:"))
  377.        (textfile (dest "ENVARC:HOSTNAME")
  378.              (append my-full-name))))
  379.     ;; this variable will be used when the user-startup is updated
  380.     (set use-setenv-to-set-hostname 1)))
  381.  ;;
  382.  ;; Get the hostname from environment variable
  383.  ;;
  384.  (set def-full-name (if (exists "ENV:HOSTNAME")
  385.             (getenv "HOSTNAME")
  386.               "")
  387.       my-host-name ""
  388.       my-domain-name "")
  389.  ;;
  390.  ;; Break the name into the host and domain parts
  391.  ;;
  392.  (set ::index 0
  393.       ::length (strlen def-full-name))
  394.  (while (AND (< ::index ::length)
  395.          (NOT (= (substr def-full-name ::index 1) ".")))
  396.    (set ::index (+ ::index 1)))
  397.  (if (= ::index ::length)
  398.      (set def-host-name ""
  399.       def-domain-name "")
  400.    (set def-host-name (substr def-full-name 0 ::index)
  401.     def-domain-name (substr def-full-name (+ ::index 1))))
  402.  ;;
  403.  ;; Ask the host name from the user
  404.  ;;
  405.  (while (OR (= my-host-name "")
  406.         ;; check that name has no dots
  407.         ((set ::index 0
  408.           ::length (strlen my-host-name))
  409.          (while (AND (< ::index ::length)
  410.              (NOT (= (substr my-host-name ::index 1) ".")))
  411.            (set ::index (+ ::index 1)))
  412.          (NOT (= ::index ::length))))
  413.    (set my-host-name
  414.     (askstring
  415.      (prompt
  416.       (cat "\nEnter the host name of your computer (not including "
  417.            "domain)"
  418.            (if (= my-host-name "")
  419.            ":"
  420.          (cat ".\nThe value " my-host-name " is illegal, since it "
  421.               "contains a dot."))))
  422.      (help net-setup-help
  423.            "    Host name is a string NOT containing dots (.), "
  424.            "example: \"my-amiga\".\n"
  425.            "    Domain specifies the administrative domain of the "
  426.            "network where your host is connected. For example, "
  427.            "\"hut.fi\" is the domain name of the Helsinki "
  428.            "University of Technology in Finland.\n")
  429.      (default def-host-name))))
  430.  ;;
  431.  ;; ask the domain name from the user
  432.  ;;
  433.  (while (= my-domain-name "")
  434.    (set my-domain-name
  435.     (askstring
  436.      (prompt "\nEnter the domain part of your host name:")
  437.      (help net-setup-help
  438.            "    Domain specifies the administrative domain of the "
  439.            "network where your host is connected. For example, "
  440.            "\"hut.fi\" is the domain name of the Helsinki "
  441.            "University of Technology in Finland.\n")
  442.      (default def-domain-name))))
  443.  (set my-full-name (cat my-host-name "." my-domain-name))
  444.  (setenv-hostname))
  445.  
  446. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  447. (procedure
  448.  ask-aliases
  449.  ;;
  450.  (set my-host-aliases my-host-name)
  451.  (while
  452.      (set new-host-name
  453.       (askstring
  454.        (prompt "Give aliases to your computer " my-full-name
  455.            " one at a time."
  456.            (if my-host-aliases
  457.                (cat "\n\nAliases are:\n" my-host-aliases)))
  458.        (default (if my-host-aliases "" my-host-name))
  459.        (help net-setup-help
  460.          "    Your computer may have additional names "
  461.          "(aliases) to its official name. It is a customary "
  462.          "to have at least one alias, which "
  463.          "is the official host name without the domain part.\n")))
  464.    (set my-host-aliases (cat my-host-aliases " " new-host-name))))
  465.  
  466. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  467. (procedure
  468.  ask-domains
  469.  ;;
  470.  (set domain-list ""
  471.       text-domain-list "")
  472.  (while
  473.      (set domain
  474.       (askstring
  475.        (prompt
  476.         "Give domain names (one at a time) to search.\n"
  477.         "Press proceed after you have given each domain.\n"
  478.         "Give empty domain after you have finished.\n"
  479.         (if text-domain-list
  480.         (cat "\nIncluded domains are:"
  481.             text-domain-list)))
  482.       (help
  483.        net-setup-help
  484.        "    In many environments more than one search domain "
  485.        "is needed for name resolution.\n"
  486.        "    For example, most of computers in the Helsinki "
  487.        "University of Technology are under single domain: "
  488.        "\"hut.fi\", so the full name of computer named "
  489.        "\"vipu\" would be \"vipu.hut.fi\". If the default "
  490.        "domain is \"hut.fi\", then this computer can be "
  491.        "referred without the domain part of the name (just "
  492.        "\"vipu\"). However, the computer science department "
  493.        "has its own domain \"cs.hut.fi\". When computers of "
  494.            "the computer science department "
  495.        "are referred, the full name must be supplied, e.g. "
  496.        "\"colossus.cs.hut.fi\". This can be avoided by "
  497.        "providing \"cs.hut.fi\" as a secondary search domain. "
  498.        "The domains are searched in the given order. It is "
  499.        "fastest to give the most used domain first.\n"
  500.        "    In Unix systems the domain names are "
  501.        "usually stored into the file `/etc/resolv.conf`.\n")
  502.       (default (if domain-list "" my-domain-name))))
  503.   (set domain-list ("%sDOMAIN %s\n" domain-list domain)
  504.        text-domain-list (cat text-domain-list "\n" domain)
  505.        default-domain "")))
  506.  
  507. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  508. (procedure
  509.  update-devices
  510.  (transcript "Updating Sana-II device drivers.")
  511.  ;;
  512.  ;; Create directory DEVS:Networks if it does not exist already
  513.  ;;
  514.  (if (NOT (= 2 (exists "DEVS:Networks")))
  515.      (makedir "DEVS:Networks"))
  516.  ;;
  517.  ;; Copy each driver in the distribution to the DEVS:Networks if necessary
  518.  ;;
  519.  (working "Checking Sana-II device drivers...")
  520.  (set dist-networks-dir (tackon source-dir "devs/networks"))
  521.  (if (= 2 (exists dist-networks-dir))
  522.      (foreach
  523.        dist-networks-dir "#?.device"
  524.        ((set dist-name (tackon dist-networks-dir @each-name)
  525.          devs-name (tackon "DEVS:Networks" @each-name)
  526.          dist-version (getversion dist-name)
  527.          copy-it (NOT (exists devs-name)))
  528.     ;;
  529.     ;; Check if the driver should be copied over
  530.     ;;
  531.     (if (NOT copy-it)
  532.         (set copy-it
  533.                  ; or if the driver in DEVS:Networks is of older version
  534.          (< (set devs-version (getversion devs-name)) dist-version)))
  535.     (if (NOT copy-it)
  536.         (set copy-it
  537.              ; or if the files are of the same version but different
  538.          (set sum-differs (if (= dist-version devs-version)
  539.                       (<> (getsum dist-name)
  540.                       (getsum devs-name))
  541.                     0))))
  542.     (if copy-it
  543.         (copyfiles
  544.          (prompt "Confirm the copy.\n"
  545.              (if devs-version
  546.              (cat "A driver with the same name exists already"
  547.                   (if sum-differs
  548.                   (cat ", it has the same version, but the "
  549.                        "files are not the same.")
  550.                 (cat ", but the driver in the "
  551.                      "DEVS:Networks is of older version.")))
  552.                ""))
  553.          (help
  554.           "    The Sana-II drivers should be located in "
  555.           "the DEVS:Networks directory.\n"
  556.           "    This directory is the official location for the SANA-II "
  557.           "device drivers. Some other software may be able to use the "
  558.           "drivers, if they are copied over.")
  559.          (source (pathonly dist-name))
  560.          (choices (fileonly dist-name))
  561.          (dest "DEVS:Networks")
  562.          (files)
  563.          (optional "nofail" "askuser")
  564.          (confirm "average"))))))
  565.  
  566.  ;;; ask user which env/sana2 files should be copied
  567.  (if (= 2 (exists (tackon source-dir "env/sana2")))
  568.      (if
  569.      (askbool (prompt "\nDo you want to install example Sana-II "
  570.               "configuration files?\n"
  571.               "Copies will be confirmed.")
  572.           (help "    This release contains example configuration "
  573.             "files for the SLIP devices and Agnet (a Sana-II "
  574.             "pseudo device).\n"
  575.             "    The copying of each file will confirmed.")
  576.           (default 1))
  577.      (copyfiles
  578.       (prompt "Select Sana-II configuration files to be copied:")
  579.       (help "    These configuration files are for example only. "
  580.         "You need to edit them for them to be useful. Refer to "
  581.         "the documentation of the Sana-II device in question. "
  582.         "The AmiTCP:doc directory contains documentation for "
  583.         "the drivers included in this release.\n"
  584.         "    The files will be copied to the ENVARC: by default. "
  585.         "Normally they will be copied to ENV: on next reboot.")
  586.       (source (tackon source-dir "env/sana2"))
  587.       (dest "ENVARC:sana2")
  588.       (all)
  589.       (files)
  590.       (optional "nofail" "askuser")
  591.       (confirm "average")))
  592.    ))
  593.  
  594. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  595. ;;;
  596. ;;; Ask network interfaces
  597. ;;;
  598. ;;; Loop until no device is given.
  599. ;;;
  600. (procedure
  601.  ask-interfaces
  602.  ;;
  603.  ;; Procedure to ask the network device driver name
  604.  ;;
  605.  ;; (Returns TRUE if an interface file exists..)
  606.  ;;
  607.  (procedure
  608.   if-ask-device
  609.   (while
  610.       ((set my-host-if
  611.         (askfile
  612.          (prompt
  613.           "Select a SANA-II device driver. If you have set "
  614.           "up all your interfaces, just press proceed.")
  615.          (default "Devs:Networks")
  616.          (help
  617.           "    Select the name of a SANA-II device to be used, "
  618.           "like \"a2065.device\" or \"rhslip.device\" for the "
  619.           "A2065 ethernet adapter or SLIP driver, respectively.\n"
  620.           "    Primary address of your computer is the one "
  621.           "with which your computer will most often be referenced.\n"
  622.           "    If you are going to attach your computer to "
  623.           "several networks (by using many network "
  624.           "adapters), different address must be assigned to "
  625.           "each adapter.\n"
  626.           "    When you have configured all your network "
  627.           "interfaces, select no file to continue. This can be done by "
  628.           "entering nothing to the \"file\" gadget.")))
  629.        ;;
  630.        ;; Try to ensure that we get at least 1 SANA-II network interface
  631.        ;;
  632.        (if (AND (= address-list "")
  633.         (= 2 (exists my-host-if)))
  634.        (askbool
  635.         (prompt
  636.          "\nYou have not defined any SANA-II network interface for "
  637.          "the " @app-name ". You should define at least one "
  638.          "external interface. It is crucial for the correct "
  639.          "operation even if you are using " @app-name " "
  640.          "locally with internal loopback device.\n"
  641.          "    For the moment you can give "
  642.          "the interface a random IP address (eg. 126.1). "
  643.          "Reinstall " @app-name " when you get a real "
  644.          "network connection.\n\n"
  645.          "Do you want to define a network interface for "
  646.          @app-name "?")
  647.         (help
  648.          "    Each IP packet must be given a source address. "
  649.          "AmiTCP/IP stamps each packet which it sends with an "
  650.          "address of some external interface. "
  651.          "Because of an internal design of the AmiTCP/IP, "
  652.          "the source address can not be local. (Local address is "
  653.          "any address configured to the internal loopback "
  654.          "interface, normally 127.1).\n")))))
  655.   ;; If user gives no file, a directory is actually given
  656.   (if (= 2 (exists my-host-if))
  657.       ""
  658.     my-host-if))
  659.  
  660.  ;;
  661.  ;; Ask for the unit number
  662.  ;;
  663.  (procedure
  664.   if-ask-unit
  665.   (set my-host-if-unit
  666.        (asknumber
  667.     (prompt "\nSelect unit number for the " my-host-if ":")
  668.     (default 0)
  669.     (help "    Select the unit number for the SANA-II device driver "
  670.           my-host-if " to use. This is usually 0 for the first "
  671.           "unit of that particular device. "
  672.           "Refer your device driver documentation for "
  673.           "correct number to use."))))
  674.  
  675.  ;;
  676.  ;; Ask for the IP address of this host
  677.  ;;
  678.  (procedure
  679.   if-ask-address
  680.   (set ::ask-ip-prompt (cat "IP address for the interface " my-host-if
  681.                 "/" my-host-if-unit ".\n"
  682.                 "Each interface must have an unique\n"
  683.                 "Internet Protocol address.")
  684.        ::ask-ip-help (cat "    If you have no actual network connection, "
  685.               "you may give a nonexistent IP number for "
  686.               "your external interface.")
  687.        ::ask-ip-need 1
  688.        my-host-addr (ask-ip-address)))
  689.  
  690.  ;;
  691.  ;; Ask for the optional destination address
  692.  ;;
  693.  (procedure
  694.   if-ask-dest-address
  695.   (set ::ask-ip-prompt (cat "Give the destination address for the "
  696.                 my-host-if "/" my-host-if-unit ".\n"
  697.                 "Address of interface is " my-host-addr ".\n"
  698.                 "This is should give the destination address "
  699.                 "ONLY if you have a point-to-point interface "
  700.                 "(e.g. SLIP). You should give NO destination "
  701.                 "address for broadcast interface (e.g. Ethernet)."
  702.                 "\n")
  703.        ::ask-ip-help (cat
  704.               "    A point-to-point device is one that is connected"
  705.               " to a medium which only two devices can attach, for "
  706.               "example the normal serial line: your computer is in "
  707.               "other end and the other computer is on the other "
  708.               "end (maybe via modem, that does not change it).\n"
  709.               "    Ethernet, for example, is not a "
  710.               "point-to-point device because several devices "
  711.               "can connect to single physical medium.")
  712.        ::ask-ip-need 0
  713.        dest-host (ask-ip-address)))
  714.  
  715.  ;;
  716.  ;; Ask for the netmask for this interface. If nothing is given,
  717.  ;; a default value will be used by the ifconfig.
  718.  ;;
  719.  (procedure
  720.   if-ask-netmask
  721.   (set ::ask-ip-prompt (cat "Netmask of network on interface " my-host-if
  722.                 "/" my-host-if-unit ".\n"
  723.                 "Address of interface is " my-host-addr
  724.                 (if dest-host
  725.                 (cat ",\ndestination address is " dest-host ".\n")
  726.                   (cat ".\n")))
  727.        ::ask-ip-help (cat "    Netmask is a dot separated string of four "
  728.               "decimal numbers (similar "
  729.               "to an internet address), which specifies which "
  730.               "bits of the host address are used as the "
  731.               "network address.\n"
  732.               "    For example, \"255.255.255.0\" "
  733.               "is a possible netmask.\n"
  734.               "    The netmask must be same for all interfaces "
  735.               "connected to the same network.\n"
  736.               "    If you do NOT give a netmask (i.e. leave it "
  737.               "empty), it will be computed from your interface "
  738.               "address. This is correct only if the network "
  739.               "is not divided into subnets.")
  740.        ::ask-ip-need 0
  741.        my-host-netmask (ask-ip-address)))
  742.  
  743.  ;;
  744.  ;; Ask for confirmation on given information
  745.  ;;
  746.  (procedure
  747.   if-confirmation
  748.   (askbool
  749.    (prompt "This is the information you gave for this interface:\n"
  750.        "\nSANA-II driver: " my-host-if
  751.        "\nUnit number: " my-host-if-unit
  752.        "\nInterface address: " my-host-addr
  753.        "\nDestination address: " (if (= dest-host "") "<none>"
  754.                        dest-host)
  755.        "\nNetmask: " (if (= my-host-netmask "") "<use default>"
  756.                my-host-netmask)
  757.        "\n\nIs this correct?")
  758.    (help "    Check the information shown. If you do not confirm it, "
  759.      "all of it will be asked again.")))
  760.  
  761.  ;;
  762.  ;; Set startup string to contain configuration for the loopback device
  763.  ;; (Other information will be later appeneded to this string variable).
  764.  ;;
  765.  (set su-script
  766.       (cat "; configure loop-back device\n"
  767.        (tackon bin-dir "ifconfig") " lo/0 localhost\n")
  768.       ;; a complete list for IP address to host name mappings..
  769.       address-list "")
  770.  ;;
  771.  ;; Ask for interfaces
  772.  ;;
  773.  (while
  774.      (if-ask-device)
  775.    (if-ask-unit)
  776.    (if-ask-address)
  777.    (if-ask-dest-address)
  778.    (if-ask-netmask)
  779.    (if (if-confirmation)
  780.        ((transcript "Adding interface " my-host-if "/" my-host-if-unit )
  781.     (set
  782.      ;; Add this interface to the script string
  783.      su-script
  784.      (cat su-script
  785.           "; Configure " my-host-if " unit " my-host-if-unit "\n"
  786.           (tackon bin-dir "ifconfig") " "
  787.           my-host-if "/" my-host-if-unit " " my-host-addr " "dest-host
  788.           (if my-host-netmask
  789.           (cat " netmask " my-host-netmask))
  790.           "\n")
  791.      ;; Add IP address entry for this IP number
  792.      address-list
  793.      (cat address-list
  794.           "HOST " my-host-addr " " my-full-name " " my-host-aliases "\n")
  795.      )))))
  796.  
  797. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  798. (procedure
  799.  ask-gateway ;;; Ask the default gateway address
  800.  ;;
  801.  (set ::ask-ip-prompt "Enter the IP address of the default gateway:"
  802.       ::ask-ip-help (cat
  803.              "    All network packets for destinations for which "
  804.              "there is no defined route, are sent to the default "
  805.              "gateway, which (hopefully) can send them towards "
  806.              "the destination host.\n"
  807.              "    The IP address (instead of a name) is needed, "
  808.              "because the name may not be resolved without the "
  809.              "gateway, if the name server is not "
  810.              "in your local network.")
  811.       ::ask-ip-need 0
  812.       def-gateway-addr (ask-ip-address))
  813.  ;;
  814.  (set su-script
  815.       (cat su-script
  816.        "; Add route to this host\n"
  817.        (tackon bin-dir "route") " add " my-full-name " localhost\n"
  818.        (if def-gateway-addr
  819.            (cat "; Add route to the default gateway\n"
  820.             (tackon bin-dir "route")
  821.             (" add default %s\n" def-gateway-addr))))))
  822.  
  823. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  824. (procedure
  825.  ask-nameservers ;;; Ask addresses to the name servers
  826.  ;;
  827.  (set name-server-list ""
  828.       name-server-text-list "")
  829.  (while
  830.      (set ::ask-ip-prompt
  831.       (cat "Enter the IP addresses of the name servers (one at a time). "
  832.            "The name servers will be searched in the given order.\n"
  833.            (if name-server-text-list
  834.            ("\nIncluded name servers are: %s\n"
  835.             name-server-text-list)))
  836.       ::ask-ip-help
  837.       (cat "    A name server is used to resolve host "
  838.            "names to internet addresses. This allows you "
  839.            "to use symbolic names for the hosts instead "
  840.            "of internet addresses.\n"
  841.            "    In Unix systems the name server addresses are "
  842.            "usually stored into the file `/etc/resolv.conf`.\n")
  843.       ::ask-ip-need 0
  844.       name-server-addr (ask-ip-address))
  845.    (set name-server-list (cat name-server-list
  846.                   "NAMESERVER " name-server-addr "\n")
  847.     name-server-text-list (cat name-server-text-list "\n"
  848.                    name-server-addr))))
  849.  
  850. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  851. (procedure
  852.  create-config-file
  853.  ;;
  854.  (textfile (dest (tackon conf-dir "netdb-myhost"))
  855.        (append
  856.         (if address-list (cat "; This host\n" address-list)))
  857.        (append
  858.         (if domain-list (cat "; Domain names\n" domain-list)))
  859.        (append
  860.         (if name-server-list (cat "; Name servers\n" name-server-list)))))
  861.  
  862. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  863. (procedure
  864.  create-startup-script
  865.  ;;
  866.  ;; Create the network startup-script (AmiTCP:bin/startnet)
  867.  ;;
  868.  (textfile (dest (tackon bin-dir "startnet"))
  869.        (append
  870.         "run AmiTCP:AmiTCP\n"
  871.         "WaitForPort AMITCP\n"
  872.         "Wait 2 secs\n")
  873.        (append su-script)
  874.        (append tcp-mount)
  875.        (append
  876.         (if (askbool
  877.          (prompt "\nDo you want the Inetd to be started at the "
  878.              @app-name " startup?\n")
  879.          (help "    Inetd is the Internet `Super Server', which "
  880.                "listens for connections on behalf of other "
  881.                "servers. When a connection request for a port, "
  882.                "for which Inetd is configured to listen, arrives "
  883.                "Inetd accepts the connections and starts the "
  884.                "server in question.\n"
  885.                "    The file " (tackon conf-dir "inetd.conf")
  886.                " contains the configuration information for the "
  887.                "Inetd, which you will want to edit.\n"
  888.                "    Currently only finger daemon is distributed "
  889.                "with " @app-name ".\n"
  890.                "    Refer to the documentation for more information."))
  891.         (cat "; Start the internet `super server'\n"
  892.              "run AmiTCP:bin/inetd\n")
  893.           "\n")))
  894.  (protect (tackon bin-dir "startnet") "+s +e"))
  895.  
  896. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  897. (procedure
  898.  update-user-startup
  899.  ;;
  900.  (set to-be-added-to-startup
  901.       (cat (if use-setenv-to-set-hostname
  902.            (cat "setenv HOSTNAME " my-full-name "\n")
  903.          "")
  904.        "assign " atcp-assign " " @default-dest "\n"
  905.        "path " bin-dir " add\n"
  906.        (if (askbool
  907.         (prompt
  908.          "\nDo you want the " @app-name
  909.          " to be started at the system startup?")
  910.         (help
  911.          "    If you decide not to start " @app-name " at startup, "
  912.          "you can later start it by giving command\n\n"
  913.          "run " (tackon bin-dir "startnet")
  914.          "\n\n at the command shell."))
  915.            ((set started-at-boot 1)
  916.         (cat "run " (tackon bin-dir "startnet\n")))
  917.          ((set started-at-boot 0)
  918.           ""))
  919.        (if (AND
  920.         (= 2 (exists include-dir))
  921.         (= 2 (exists lib-dir)))
  922.            (if (askbool
  923.             (prompt "\nDo you want to add assigns to "
  924.                 "netinclude and netlib directories?")
  925.             (help "    These assigns are only needed for compiling "
  926.               "programs using the " @app-name "."))
  927.            (cat "; assigns for programmers\n"
  928.             "assign netinclude: " include-dir "\n"
  929.             "assign netlib: " lib-dir "\n"))))
  930.       complete-to-be-added-to-startup (cat ";BEGIN " @app-name "\n"
  931.                        to-be-added-to-startup
  932.                        ";END " @app-name "\n"))
  933.  ;; Ask for confirmation to add
  934.  (if (>= exec-version 37)
  935.      (if
  936.      (askbool
  937.       (prompt "\nDo you want Installer to make the required changes to "
  938.           "your s:user-startup script?\n"
  939.           "\n(There is a problem with Installer making these "
  940.           "changes if you do not have the original boot volume "
  941.           "mounted. Installer may crash or corrupt your system "
  942.           "in that case.)")
  943.       (help "If you do not want Installer make the changes, it will "
  944.         "create a script file containing commands which you should "
  945.         "add to the s:user-startup file."))
  946.      ;; Do the addition
  947.      (startup
  948.       @app-name
  949.       (command to-be-added-to-startup)
  950.       (prompt "Installer will modify your S:User-Startup file. "
  951.           "Following lines will be appended to it:\n\n"
  952.           complete-to-be-added-to-startup)
  953.       (help "   Installer needs to make indicated modifications to "
  954.         "your user startup file to make sure that everything is "
  955.         "correctly set up to run " @app-name ".\n"
  956.         "   You should make modifications later by hand "
  957.         "if you skip this part."))
  958.        ;; Let user add commands
  959.        ((set addition-to-user-startup
  960.          (tackon atcp-assign "addition-to-user-startup"))
  961.     (textfile (dest addition-to-user-startup)
  962.           (append complete-to-be-added-to-startup))
  963.     (message "Installer created file " addition-to-user-startup
  964.          ", which you can add to your startup file by hand. "
  965.          "The file includes following changes:\n\n"
  966.          complete-to-be-added-to-startup)))))
  967.  
  968. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  969. (procedure
  970.  ask-copy-old-configuration
  971.  ;;
  972.  ;; Copy old configuration files
  973.  ;;
  974.  (set
  975.   edit-change-fingerd "t:edit-change-fingerd"
  976.   old-conf-dir (tackon old-atcp-directory "db")
  977.   old-netdb-myhost (tackon old-conf-dir "netdb-myhost")
  978.   old-startnet (tackon old-atcp-directory "bin/startnet"))
  979.  ;;
  980.  (procedure 
  981.   copy-myhost-config 
  982.   (if (>= @user-level 2)
  983.       (message "\nCopying files\n\n"
  984.            old-netdb-myhost "\n"
  985.            old-startnet "   \n"
  986.            "\nto directory \"" @default-dest "\"."))
  987.   (copyfiles
  988.    (source old-netdb-myhost)
  989.    (dest conf-dir)
  990.    (files))
  991.   (copyfiles
  992.    (source old-startnet)
  993.    (dest bin-dir)
  994.    (files)))
  995.  ;;
  996.  (procedure 
  997.   copy-rest-config
  998.   (copyfiles
  999.    (prompt
  1000.     "Select configuration files you want to copy from old configuration")
  1001.    (help
  1002.     "    You may copy your old configuration files or use untouched files "
  1003.     "came with the new distribution.")
  1004.    (source old-conf-dir) 
  1005.    (dest conf-dir)
  1006.    (files)
  1007.    (confirm)
  1008.    (if (exists (tackon old-conf-dir "passwd"))
  1009.        (choices
  1010.     "AmiTCP.config"
  1011.     "inetd.conf"
  1012.     "netdb"
  1013.     "hosts"
  1014.     "services"
  1015.     "protocols"
  1016.     "passwd"
  1017.     "group")
  1018.      (choices 
  1019.       "AmiTCP.config"
  1020.       "inetd.conf"
  1021.       "netdb"
  1022.       "hosts"
  1023.       "services"
  1024.       "protocols"))
  1025.    (optional "nofail" "force" "askuser")))
  1026.  ;;
  1027.  (procedure 
  1028.   update-startnet
  1029.   (set startnet-file (tackon bin-dir "startnet"))
  1030.   (if (run (cat "search search \"Mount TCP:\" quiet from " startnet-file)
  1031.        (safe))
  1032.       ((textfile (dest startnet-file)
  1033.          (include startnet-file)
  1034.         (append tcp-mount "\n")
  1035.         (prompt 
  1036.          "\nDo you want to mount TCP: device at network startup?")
  1037.         (help 
  1038.          @app-name " includes a DOS handler for TCP communications. "
  1039.          "This DOS handler will usually be mounted at network "
  1040.          "startup.")
  1041.         (confirm))
  1042.        (protect (tackon bin-dir "startnet") "+s +e"))))
  1043.  (procedure
  1044.   update-services
  1045.   (set service-file (tackon conf-dir "services"))
  1046.   (if (run (cat "search search \""amiganetfs"\" quiet from " service-file)
  1047.        (safe))
  1048.       (;; Not found, add it 
  1049.        (textfile (dest service-file)
  1050.          (include service-file)
  1051.         (append ";\n; Amiga specific services\n;\n"
  1052.             "amiganetfs      2500/tcp\n")
  1053.         (prompt 
  1054.          "Do you want to add AmigaNetFS service to your "
  1055.          "service database?")
  1056.         (help 
  1057.          @app-name " includes NetFS, network file system between "
  1058.          "Amigas, by Timo Rossi. It is a TCP based protocol which "
  1059.          "requires both ends of connection have same service "
  1060.          "(TCP port) entries. If you already had NetFS installed "
  1061.          "you probably do not want to update your service "
  1062.          "database.")
  1063.         (confirm)))))
  1064.  (procedure
  1065.   update-inetd-conf
  1066.   ;; Change fingerd to serv/in.fingerd
  1067.   (set inetd-conf (tackon atcp-assign "db/inetd.conf"))
  1068.   (if (run (cat "search search \"serv/in.fingerd\" quiet from " inetd-conf)
  1069.        (safe))
  1070.       ((textfile 
  1071.     (dest edit-change-fingerd)
  1072.     (append
  1073.      "f b/finger    stream/\n"
  1074.      "e -amitcp:bin/fingerd-amitcp:serv/in.fingerd-\n"
  1075.      "m+"
  1076.      "i"
  1077.      "# NetFS, a networking support between Amigas"
  1078.      "# Remove # from the next line to enable NetFS"
  1079.      "#amiganetfs stream    tcp nowait root amitcp:serv/netfs-server"
  1080.      "Z"
  1081.      "w\n")
  1082.     (safe))
  1083.        (run (cat "c:edit from " inetd-conf " with "
  1084.          edit-change-fingerd " >t:what-changed")
  1085.         (confirm)
  1086.         (prompt "\nUpdate \"inetd.conf\" to use " @app-name " services?")
  1087.         (help "    The fingerd service daemon is moved to directory "
  1088.           "\"AmiTCP:serv\", and \"inetd.conf\" must be updated to use "
  1089.           "it. Also the NetFS must be added to old configuration")))))
  1090.  ;;
  1091.  (procedure 
  1092.   update-napsaprefs
  1093.   (set old-napsaprefs
  1094.        (if (exists (tackon old-atcp-directory "db/NapsaPrefs") (noreq))
  1095.        (tackon old-atcp-directory "db/NapsaPrefs")
  1096.      (if (exists "s:NapsaPrefs")
  1097.          "s:NapsaPrefs")
  1098.      ""))
  1099.   (if old-napsaprefs
  1100.       (;;
  1101.        (copyfiles 
  1102.     (source old-napsaprefs)
  1103.     (dest conf-dir)
  1104.     (files)
  1105.     (confirm)
  1106.     (prompt "\nUse your old Napsaterm preferences?")
  1107.     (help  "    Installer have found an existing NapsaPrefs file "
  1108.            old-napsaprefs ". You can copy it to new configuration "
  1109.            "directory.")))))
  1110.  (procedure 
  1111.   copy-extra-binaries
  1112.   "")
  1113.  (transcript "Ready to copy old configuration.")
  1114.  (if (askbool
  1115.       (default 1)
  1116.       (prompt
  1117.        "\nDo you want to use settings from earlier installation?")
  1118.       (help
  1119.        "    Installer have detected existing configuration "
  1120.        "directory \"" old-conf-dir "\" which "
  1121.        "can be used to configure " @app-name ". You can keep most "
  1122.        "of your previous configuration. This is important if you have "
  1123.        "installed extra applications.\n"
  1124.        "    Installer will copy your \"" old-startnet "\" script and "
  1125.        "\"" old-netdb-myhost "\" configuration "
  1126.        (if (> @user-level 1) 
  1127.        "and optionally "
  1128.      "then ")
  1129.        "other configuration files" (if "" "and binaries") ".\n"))
  1130.      ((copy-myhost-config)
  1131.       (copy-rest-config)
  1132.       (update-inetd-conf)
  1133.       (update-services)
  1134.       (update-startnet)
  1135.       (update-napsaprefs)
  1136.       (copy-extra-binaries)
  1137.       "Already configured")
  1138.    ""))
  1139.  
  1140. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1141. (procedure
  1142.  install-emacstcp
  1143.  ;; is GNU Emacs is installed?
  1144.  (if (exists "GNUEmacs:" (noreq)) ; check if GNUEmacs is installed
  1145.      (if (exists (tackon source-dir "appl/EmacsTCP"))
  1146.      ((transcript "Installing EmacsTCP.")
  1147.       (copyfiles
  1148.        (source (tackon source-dir "appl/EmacsTCP/lisp"))
  1149.        (prompt "Copying GNU Emacs lisp files to GNUEmacs:lisp")
  1150.        (help "   Emacs lisp files implement the Emacs side of the "
  1151.          "Gnu Emacs TCP support.")
  1152.        (pattern "#?.el#?")
  1153.        (dest "GNUEmacs:lisp")
  1154.        (optional "nofail" "askuser")
  1155.        (confirm))
  1156.       (copyfiles
  1157.        (source (tackon source-dir "appl/EmacsTCP/etc"))
  1158.        (choices "tcp_AmiTCP")
  1159.        (prompt "Copying tcp_AmiTCP (program) to GNUEmacs:etc")
  1160.        (help "   tcp_AmiTCP implements the " @app-name " side of the "
  1161.          "Gnu Emacs TCP support.")
  1162.        (dest "GNUEmacs:etc")
  1163.        (optional "nofail" "askuser")
  1164.        (confirm))
  1165.       (if (exists "GNUEmacs:etc/tcp_AmiTCP")
  1166.           (protect "GNUEmacs:etc/tcp_AmiTCP" "+p")) ; tcp is pure
  1167.       ;; Tell user what to do with .emacs
  1168.       (run (cat "run " pager-cmd)
  1169.            (tackon source-dir "appl/EmacsTCP/add_to_.emacs")
  1170.            (safe)))
  1171.        (message "EmacsTCP not present in " source-dir "."))
  1172.    (message "GNU Emacs must be installed before EmacsTCP.")))
  1173.  
  1174. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1175. (procedure
  1176.  ask-install-emacstcp
  1177.  ;; is GNU Emacs is installed?
  1178.  (if (exists "GNUEmacs:" (noreq)) ; check if GNUEmacs is installed
  1179.      (if (exists (tackon source-dir "appl/EmacsTCP"))
  1180.      (if (askbool
  1181.           (prompt "\nDo you want to install needed files for GNU Emacs "
  1182.               "support?")
  1183.           (help
  1184.            "    Installer has noticed that you have GNUEmacs: assigned "
  1185.            "in your system. Normally this means that you have the "
  1186.            "GNU Emacs installed.\n"
  1187.            "    AmiTCP/IP provides an Emacs extension, which makes "
  1188.            "it possible to run networking programs with it. To enable "
  1189.            "this feature some files need to be installed "
  1190.            "in to directories under \"GNUEmacs:\".\n"
  1191.            "    If you select \"Yes\", files will be installed and you "
  1192.            "will be able to use TCP/IP applications written for "
  1193.            "GNU Emacs."))
  1194.          (install-emacstcp)
  1195.        (transcript "User denied adding AmiTCP/IP support for GNU Emacs."))
  1196.        (transcript "EmacsTCP not present on " source-dir "."))
  1197.    (transcript "No GNU Emacs detected in system.")))
  1198.  
  1199. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1200. (procedure
  1201.  install-napsaterm
  1202.  ;;
  1203.  ;; Install Napsaterm fonts
  1204.  ;;
  1205.  ;; Ask for directory to install fonts.
  1206.  (procedure
  1207.   ask-napsa-font-dir
  1208.   (askdir
  1209.    (prompt "Select directory where to install Napsaterm fonts.\n")
  1210.    (help "    Here you can specify location where to install "
  1211.      "the Napsaterm font called `napsa'. "
  1212.      "This directory should be in your font path "
  1213.      "(i.e. some directory in the assign fonts:).")
  1214.    (newpath)
  1215.    (default "fonts:")))
  1216.  (copyfiles
  1217.   (source (tackon source-dir "appl/napsaterm/fonts"))
  1218.   (prompt "Copying font `napsa' to " napsa-font-dir ".")
  1219.   (dest (ask-napsa-font-dir))
  1220.   (optional "nofail")
  1221.   (fonts)
  1222.   (all)))
  1223.  
  1224. (procedure
  1225.  ask-install-napsaterm
  1226.  ;; Optionally intall Napsafonts
  1227.  (if (askbool
  1228.       (prompt "Do you want to install Napsaterm fonts, napsa?\n"
  1229.        "\n    (Napsaterm uses the special fonts in its window "
  1230.        "if they are installed. "
  1231.        "They are sized 6╫11 pixels and contain some special VT102 "
  1232.        "characters. They are suitable for interlaced screens. "
  1233.        "If you have normal NTSC or PAL screen, it might be better to not "
  1234.        "install Napsa and use Topaz/8.)\n")
  1235.       (help
  1236.        "    Napsaterm is a VT102 terminal emulator which uses the rlogin "
  1237.        "protocol. You can have a remote login to many hosts in Internet "
  1238.        "with Napsaterm.\n"
  1239.        "    Napsaterm is based on the Niftyterm 1.2 written by "
  1240.        "Todd Williamson and Christopher J. Newman."))
  1241.      (install-napsaterm)))
  1242.  
  1243. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1244. (procedure
  1245.  ;;
  1246.  ;; Install passwd and group databases
  1247.  ;;
  1248.  install-user-databases
  1249.  (transcript "Installing user databases")
  1250.  (procedure get-mufs-version
  1251.         (set mufs-vernum (getversion "multiuser.library" (resident)))
  1252.         (set mufs-ver (/ mufs-vernum 65536))
  1253.         (set mufs-rev (- mufs-vernum (* ver 65536))))
  1254.  (procedure passwd-create
  1255.         (copyfiles
  1256.          (prompt "Copying " passwd-source " to AmiTCP:db/passwd.")
  1257.          (source passwd-source)
  1258.          (dest (tackon source-dir "db"))
  1259.          (newname "passwd")
  1260.          (optional "nofail")))
  1261.  (procedure group-create
  1262.         (copyfiles
  1263.          (prompt "Copying " group-source " to AmiTCP:db/group.")
  1264.          (source group-source)
  1265.          (dest (tackon source-dir "db"))
  1266.          (newname "group")
  1267.          (optional "nofail")))
  1268.  ;; If we are running multiuser 1.4, do some special
  1269.  (get-mufs-version)
  1270.  (if mufs-vernum
  1271.      (transcript ("Multiuser.library %ld.%ld found" mufs-ver mufs-rev)))
  1272.  (if (or (> mufs-ver 39)
  1273.      (and (= mufs-ver 39) (>= mufs-rev 151)))
  1274.      ((transcript "multiuser.library 1.4 or newer detected")
  1275.       (message
  1276.        "\n    You seem to have MultiUser 1.4 installed. In order to ensure "
  1277.        "the most seamless operation between MultiUser 1.4 and "
  1278.        @app-name " you should do following:\n")
  1279.       (message
  1280.        "\nEither make a link from \"AmiTCP:db/passwd\" to "
  1281.        "MultiUser 1.4 \"passwd\" file, for example with command\n\n"
  1282.        "makelink AmiTCP:db/passwd :multiuser/config/passwd\n\n"
  1283.        "or copy MultiUser 1.4 \"passwd\" file and \"MultiUser.config\" to "
  1284.        "directory \"AmiTCP:db/\", then recreate keyfiles with command\n\n"
  1285.        "makekeyfiles AmiTCP:db/ AmiTCP:db/ vol1: vol2:    \n")))
  1286.  (set passwd-source
  1287.       (if (exists "Inet:db/passwd" (noreq)) ; check for AS225r2 compatible
  1288.       "Inet:db/passwd"
  1289.     (tackon source-dir "db/passwd-example")))
  1290.  (set group-source (tackon source-dir "db/group-example"))
  1291.  (if (>= @user-level 2)
  1292.      (message 
  1293.       "\n"
  1294.       "Copying user database from file"
  1295.       "\n\n\"" passwd-source "\"\n\n"
  1296.       "and group database from file"
  1297.       "\n\n\"" group-source "\"\n\n"))
  1298.  (passwd-create)
  1299.  (group-create))
  1300.  
  1301. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1302. ;;;
  1303. ;;; Installatation sequence
  1304. ;;;
  1305. (complete 00) (transcript "On making " @app-name ".")
  1306. (complete 01) (check-user-level)
  1307. (complete 02) (check-system-version)
  1308. (complete 03) (check-available-memory)
  1309. (complete 04) (check-old-assign)
  1310. (complete 05) (select-destination-directory)
  1311.  
  1312. (if (exists (tackon conf-dir "netdb-myhost"))
  1313.     ( ;; Already configured, ask user what s/he wants to do
  1314.      (transcript @app-name " already configured, presenting options")
  1315.      (while
  1316.      ((complete 10)
  1317.       (set choice
  1318.            (askchoice
  1319.         (prompt @app-name " seems to be already installed. Select "
  1320.             "one of following:")
  1321.         (help "    Installer has detected that the file "
  1322.               "\"AmiTCP:db/netdb-myhost\" exists already. Normally "
  1323.               "this means that the installation has been "
  1324.               "successfully completed.\n"
  1325.               "    You can now select what part of the full "
  1326.               "installation you want to repeat. This selection will "
  1327.               "be repeatedly presented, until \"Done\" is choosed.")
  1328.         (choices "Update Sana-II drivers"    ; 0
  1329.              "Install EmacsTCP"        ; 1
  1330.              "Install NapsaTerm fonts"    ; 2
  1331.              "Install user databases"       ; 3
  1332.              "Reconfigure AmiTCP/IP"    ; 4
  1333.              "Done")            ; 5
  1334.         (default 5)))
  1335.       (<> choice 5))
  1336.        (select choice
  1337.            ;; (0)
  1338.            (update-devices)
  1339.            ;; (1)
  1340.            (install-emacstcp)
  1341.            ;; (2)
  1342.            (install-napsaterm)
  1343.            ;; (3)
  1344.            (install-user-databases)
  1345.            ;; (4)
  1346.            ((transcript "Reconfiguring " @app-name ".")
  1347.         (complete 20) (ask-hostname)
  1348.         (complete 25) (ask-aliases)
  1349.         (complete 30) (ask-interfaces)
  1350.         (complete 65) (ask-gateway)
  1351.         (complete 70) (ask-domains)
  1352.         (complete 75) (ask-nameservers)
  1353.         (complete 85) (update-user-startup)
  1354.         (complete 90) (create-startup-script)
  1355.         (complete 95) (create-config-file) ; This must be the last one!
  1356.         ))
  1357.        )
  1358.      )
  1359.   ( 
  1360.    (complete 10) (copy-files-to-destination) ; copy AmiTCP/IP files
  1361.    (complete 20) (update-devices)         ; update Sana-II drivers
  1362.    (complete 30) (ask-install-emacstcp)         ; install EmacsTCP
  1363.    (complete 35) (ask-install-napsaterm)     ; install NapsaTerm
  1364.    (if (if (if old-atcp-directory
  1365.            (exists (tackon old-atcp-directory "db/netdb-myhost") 
  1366.             (noreq)))
  1367.        ((complete 40)
  1368.         (ask-copy-old-configuration)))
  1369.        ((if (exists (tackon conf-dir "passwd"))
  1370.         (transcript "There is already user database.")
  1371.       ((complete 70)
  1372.        (install-user-databases))) ; install passwd/group
  1373.     (complete 90) (update-user-startup)
  1374.     )
  1375.      (;; First time installation, do it all
  1376.       (complete 45) (install-user-databases)    ; install passwd/group
  1377.  
  1378.       ;; Configure AmiTCP/IP
  1379.       (complete 50) (ask-hostname)
  1380.       (complete 55) (ask-aliases)
  1381.       (complete 60) (ask-interfaces)
  1382.       (complete 75) (ask-gateway)
  1383.       (complete 80) (ask-domains)
  1384.       (complete 85) (ask-nameservers)
  1385.       (complete 90) (update-user-startup)
  1386.       (complete 95) (create-startup-script)
  1387.       (complete 96) (create-config-file)))    ; This must be the last one!
  1388.    ;; show something
  1389.    (run (cat "run " pager-cmd) (tackon atcp-assign "README.FIRST") (safe))
  1390.    )
  1391.   )
  1392. ;;; All done!
  1393. (complete 100)
  1394. (exit "You should reboot your Amiga to make sure that everything is set "
  1395.       "up properly for the " @app-name ". After the reboot, "
  1396.       (if started-at-boot
  1397.       (cat @app-name " should be running. If this is not a case, "))
  1398.       "type \"run AmiTCP:bin/startnet\" in a command shell to start "
  1399.       @app-name ".")
  1400.